import request from '@/utils/request'
import axios from 'axios'
import store from '@/store'

// 获取验证码
export function getSMScode (mobile) {
  return request({
    url: 'sms/codes/' + mobile
  })
}

export function userLogin (data) {
  return request({
    url: 'authorizations',
    method: 'POST',
    data
  })
}

// 获取用户的频道 (API -- 数据层) 本地存储  （如果登录了，请求，如果没有登录 用本地）
export async function getUserChannels () {
  // 假如没有token （登录）
  if (!store.state.user.token) {
    // 判断是否有本地存储
    if (window.localStorage.getItem('channels')) return JSON.parse(window.localStorage.getItem('channels'))
  }

  const [err, data] = await request({
    url: 'user/channels'
  })
  if (err) this.$toast.fail(err)
  window.localStorage.setItem('channels', JSON.stringify(data.data.channels))
  return data.data.channels
}

// 添加游客或者个人的频道信息
export async function addUserChannels (myChannels) {
  if (!store.state.user.token) {
    const channels = JSON.parse(window.localStorage.getItem('channels') || '[]')
    const { id, name } = myChannels[myChannels.length - 1]
    channels.push({
      id,
      name
    })
    // 将channels存储到本地存储中
    return window.localStorage.setItem('channels', JSON.stringify(channels))
  }

  // 登录 发送请求，添加频道
  const [err] = await request({
    url: 'user/channels',
    method: 'PUT',
    data: {
      channels: myChannels
    }
  })
  if (err) return this.$toast.fail(err)
}

// 删除频道
export async function deleteChannel (id) {
  // 判断是否登录
  if (!store.state.user.token) {
    // 1.获取本地数据
    const channels = JSON.parse(window.localStorage.getItem('channels') || '[]')
    const index = channels.findIndex((item) => { return item.id === id })
    channels.splice(index, 1)

    //
    window.localStorage.setItem(JSON.stringify(channels))
  } else {
    return await request({
      url: 'user/channels/' + id,
      method: 'delete'
    })
  }
}

// 获取用户自己的信息
export function getUserInfo () {
  return request({
    url: 'user'
  })
}

// 获取用户详细的个人信息
export function getUserProfile () {
  return request({
    url: 'user/profile'
  })
}

export function modifyUserProfile (user) {
  return request({
    url: 'user/profile',
    method: 'PATCH',
    data: user
  })
}

/**
 * 修改头像
 * @param {Object} formData -  {photo:'文件数据'}
 */
export const updateUserPhoto = (formData) => {
  return request({
    url: 'user/photo',
    method: 'patch',
    data: formData
  })
}

/**
 * 刷新token
 * @param {String} refreshToken - 保存的refresh_token
 * @returns
 */
// 为什么使用的是axios 而不是 request？
export const refreshTokenAPI = (refresh_token) => {
  return axios({
    url: 'http://localhost:8080/v1_0/authorizations',
    method: 'put',
    headers: {
      Authorization: `Bearer ${refresh_token}`
    }
  })
}
